﻿using System;
using System.Collections.Generic;
//using System.Linq;
//using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Reflection;

namespace LabelPrintSystem
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            #region ExceptionEvent
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException, true);//设置应用程序处理异常方式：ThreadException处理  
            Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); //处理UI线程异常  
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);///处理非UI线程异常  
            #endregion

            string sConnect = "";
            string sPath, sDbName, sUserID, sPassword;

            #region ANTENNA

            sPath = "10.53.20.172,1433";
            sDbName = "ATS";
            //sUserID = "sa";
            //sPassword = "mobi@20120510";
            sUserID = "ZGJTRJ";
            sPassword = "20170309";
            sConnect = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}",
                                     sPath, sDbName, sUserID, sPassword);
            MicroDBHelper.SetConnection(sConnect, "ANTENNA");


            sPath = "jiang-PC";
            sDbName = "ATS";
            sUserID = "sa";
            sPassword = "123";
            // Integrated Security=SSPI;  当设置Integrated Security为 True 的时候，连接语句前面的 UserID, PW 是不起作用的，即采用windows身份验证模式。 只有设置为 False 或省略该项的时候，才按照 UserID, PW 来连接。 Integrated Security 还可以设置为：sspi ，相当于 True，建议用这个代替 True。
            //Trusted_Connection=true ，将使用当前的Windows帐户凭据进行身份验证 Trusted_Connection=false;将不采用信任连接方式(也即不采用Windows验证方式)，而改由SQL Server 2000验证方式
            sConnect = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3};Integrated Security=SSPI",
                                     sPath, sDbName, sUserID, sPassword);
            MicroDBHelper.SetConnection(sConnect, "MYSELFPC");

            sPath = "LENOVO-PC";
            sDbName = "ATS";
            sUserID = "sa";
            sPassword = "123";
            // Integrated Security=SSPI;  当设置Integrated Security为 True 的时候，连接语句前面的 UserID, PW 是不起作用的，即采用windows身份验证模式。 只有设置为 False 或省略该项的时候，才按照 UserID, PW 来连接。 Integrated Security 还可以设置为：sspi ，相当于 True，建议用这个代替 True。
            //Trusted_Connection=true ，将使用当前的Windows帐户凭据进行身份验证 Trusted_Connection=false;将不采用信任连接方式(也即不采用Windows验证方式)，而改由SQL Server 2000验证方式
            sConnect = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3};Integrated Security=SSPI",
                                     sPath, sDbName, sUserID, sPassword);
            MicroDBHelper.SetConnection(sConnect, "MYWORKPC");

            #endregion


            bool createNew;
            using (Mutex mutex = new Mutex(true, Application.ProductName, out createNew))
            {//Mutex 互斥进程
                if (createNew)
                {  
                    string[] sArray = Assembly.GetExecutingAssembly().GetName().Version.ToString().Split(new char[1] { '.' });
                    string vr = string.Format("{0}.{1}", sArray[0], sArray[1]);
                    object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
                    string CSname = ((AssemblyProductAttribute)attributes[0]).Product;
                    try
                    {
                        ClsDataUser userObj = new ClsDataUser();
                        userObj.sEquID = Function.GetIPAddress();
                        ClsCSVersionForMOD version = new ClsCSVersionForMOD(userObj.sEquID);
                        if (!version.VersionCheck(CSname, vr))
                        {
                            MessageBox.Show(string.Format("当前软件版本{0}无效!", vr));
                            return;
                        }

                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
                        FrmLogin frmlg = new FrmLogin(userObj);
                        if (frmlg.ShowDialog() == DialogResult.OK)
                        {
                            frmlg.Dispose();
                            Application.Run(new FrmMain(userObj));
                        }
                    }
                    catch (Exception EX)
                    {
                        MessageBox.Show(EX.ToString());
                        return;
                    }
                }
                // 程序已经运行的情况，则弹出消息提示并终止此次运行
                else
                {
                    MessageBox.Show("应用程序已经在运行中...", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    System.Threading.Thread.Sleep(1000);

                    //  终止此进程并为基础操作系统提供指定的退出代码。
                    System.Environment.Exit(1);
                }
            }
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {//程序异常退出捕获信息 
            Function.WriteException(e.Exception);
            Application.Exit();
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {//程序异常退出捕获信息 
            Exception ex = e.ExceptionObject as Exception;
            Function.WriteException(ex);
            Application.Exit();
        }
    }
}
